package com.gmadmin.service;


import com.gmadmin.entity.SysUser;
import com.gmadmin.entity.dto.SysUserDto;
import com.gmadmin.payload.UserQueryCriteria;
import com.gmadmin.entity.vo.user.SysUserVo;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @author zhangliang
 * @version 1.0
 * @date 2021/2/2 14:59
 */

public interface SysUserService extends BaseService<SysUser, UserQueryCriteria> {


    /**
     * 根据用户名、邮箱、手机号查询用户
     *
     * @param usernameOrEmailOrPhone 用户名手机号邮箱
     * @return 返回用户信息
     */
    SysUserVo findByUsernameOrEmailOrPhone(String usernameOrEmailOrPhone);


    /**
     * 新增用户
     * @param user  用户信息
     * @param roles  角色
     * @param sysJobs  工作
     * @return
     */
//   Object insert(SysUser user, List<SysRole> roles, List<SysJob> sysJobs);

    /**
     * 根据用户id批量删除用户
     *
     * @param ids
     */
    void delUsers(List<Long> ids);


    /**
     * 更新用户信息
     * @param sysUser
     * @param sysRoles
     * @param sysJobs
     * @return
     */
//    boolean updateUserById(SysUser sysUser, List<SysRole> sysRoles, List<SysJob> sysJobs);


    /**
     * 导出用户信息，如果ids不存在就是全部导出，如果存在就是指定导出
     *
     * @param response
     * @param ids
     * @throws IOException
     */
    void download(HttpServletResponse response, List<Long> ids) throws IOException;


    /**
     * 新增或者修改用户
     *
     * @param userDto
     */
    void saveOrUpdateUser(SysUserDto userDto);


    /**
     * 保存用户与角色关联
     * @param userId
     * @param roleIds
     */
    void deleteAndSaveUserAndRoles(Long userId, List<Long> roleIds);


    /**
     * 删除和保存组织
     * @param userId
     * @param organizationIds
     */
    void deleteAndSaveUserAndOrganization(Long userId, List<Long> organizationIds);


    /**
     * 删除和保存职位关联
     * @param userId
     * @param positionIds
     */
    void deleteAndSaveUserAndPositions(Long userId, List<Long> positionIds);

    /**
     * 删除用户，逻辑删除
     * @param id 用户id
     */
    void delUser(Long id);
}
